With some networks, communication between one node and another node (e.g., a server and a storage device) may be possible via multiple available routes through the network. Such communication is embodied in a sequence of transmitted data frames or a “flow” between the source node and the destination node, wherein the flow typically represents a single session or data exchange within a specific protocol. The flow enters the network at a source switch connected to the source node and leaves the network at a destination switch connected to the destination node.
In cases where multiple routes exist for a flow, when the source switch receives a frame associated with that flow, the source switch determines whether a route though the network has already been assigned to the flow. If a route has already been assigned, the source switch transmits the frame via the egress port corresponding to the assigned route. If a route has not already been assigned, the source switch selects one of the available routes over which to transmit the flow and records the selected route corresponding to the flow.
Typically, such a selection is performed randomly and/or without significant knowledge of downstream network characteristics, and therefore the selected route may not offer the best performance. In other words, in some circumstances, another available route may have provided better performance but might not be selected. In such cases, after that initial selection, the flow is fixed to the lower performance route for the flow's duration (e.g., until the server/storage exchange completes and the flow terminates). For example, a flow may be routed through a part of the network that includes slow switches and/or congested links, while other routes were available that do not include such slow switches or congested links. Yet, by virtue of the initial route selection, the flow remains bound to the slower route until its completion. Such route selection can result in non-optimal routing, particularly for latency-sensitive flows.
Further, network performance can change as the traffic through various network links changes. Therefore, even if an optimal route is initially selected for a given flow, the route may later change to have excessive latency while other routes could provide a lower latency. However, no solutions exist to dynamically adjust routing based on latency distributions and changes in a network.